---
title: Create a development build on EAS
description: Learn how to create development builds for a project.
sidebar_title: Create a build on EAS
searchRank: 97
searchPosition: 2
hasVideoLink: true
---

import { VideoRecorderIcon } from '@expo/styleguide-icons/outline/VideoRecorderIcon';

import { BoxLink } from '~/ui/components/BoxLink';
import { Collapsible } from '~/ui/components/Collapsible';
import { YesIcon, NoIcon } from '~/ui/components/DocIcons';
import { Prerequisites, Requirement } from '~/ui/components/Prerequisites';
import { Terminal } from '~/ui/components/Snippet';
import { Step } from '~/ui/components/Step';
import { VideoBoxLink } from '~/ui/components/VideoBoxLink';

When you create a new Expo app with `npx create-expo-app`, you start off with a project where you update the JavaScript code on your local machine and view the changes in the Expo Go app. A **development build** is essentially **your own version of Expo Go** where you are free to use any native libraries and change any native config. In this guide, you will learn how to convert your project that runs on Expo Go into a development build, which will make the native side of your app fully customizable.

<VideoBoxLink videoId="uQCE9zl3dXU" title="How to create a development build" />

## Prerequisites

The instructions assume you already have an existing Expo project that runs on Expo Go.

The requirements for building the native app depend on which platform you are using, which platform you are building for, and whether you want to build on EAS or on your local machine.

<Collapsible summary="Build on EAS">

This is the easiest way to build your native app, as it requires no native build tools on your side. The builds happen on the EAS servers, which makes it possible to trigger iOS builds from non-macOS platforms.

|             | Android    | iOS Simulator | iPhone device   |
| ----------- | ---------- | ------------- | --------------- |
| **macOS**   | <YesIcon/> | <YesIcon/>    | <YesIcon/> (\*) |
| **Windows** | <YesIcon/> | <YesIcon/>    | <YesIcon/> (\*) |
| **Linux**   | <YesIcon/> | <YesIcon/>    | <YesIcon/> (\*) |

(\*) All builds that run on an iPhone device require a paid [Apple Developer](https://developer.apple.com) account for build signing.

</Collapsible>

<Collapsible summary="Build locally using the EAS CLI">

Any EAS CLI command can be built on your local machine with the `--local` flag. This requires your local [development environment](https://reactnative.dev/docs/set-up-your-environment?os=macos&platform=ios) to be set up with native build tools. Read more about [local app development](/build-reference/local-builds/).

|             | Android           | iOS Simulator | iPhone device   |
| ----------- | ----------------- | ------------- | --------------- |
| **macOS**   | <YesIcon/>        | <YesIcon/>    | <YesIcon/> (\*) |
| **Windows** | <YesIcon/> (\*\*) | <NoIcon />    | <NoIcon />      |
| **Linux**   | <YesIcon/>        | <NoIcon />    | <NoIcon />      |

(\*) All builds that run on an iPhone device require a paid [Apple Developer](https://developer.apple.com) account for build signing.

(\*\*) No first-class support, but possible with [WSL](http://expo.fyi/wsl.md).

</Collapsible>

<Collapsible summary="Build locally without EAS">

To build locally without EAS requires your local [development environment](https://reactnative.dev/docs/set-up-your-environment?os=macos&platform=ios) to be set up with native build tools. This is the only way to test your iOS build on an iPhone device without a paid Apple Developer Account (only possible on macOS). Read more about [local app compilation](/guides/local-app-development/#local-app-compilation) and see the [Expo Go to Development Build](/develop/development-builds/expo-go-to-dev-build/) guide.

|             | Android    | iOS Simulator | iPhone device |
| ----------- | ---------- | ------------- | ------------- |
| **macOS**   | <YesIcon/> | <YesIcon/>    | <YesIcon/>    |
| **Windows** | <YesIcon/> | <NoIcon />    | <NoIcon />    |
| **Linux**   | <YesIcon/> | <NoIcon />    | <NoIcon />    |

</Collapsible>

## Get started

For detailed, step-by-step instructions, see our [EAS Tutorial](/tutorial/eas/introduction). Available also as a [tutorial series](https://www.youtube.com/playlist?list=PLsXDmrmFV_AS14tZCBin6m9NIS_VCUKe2) on YouTube.

<Step label="1">

### Install expo-dev-client

<Terminal cmd={['$ npx expo install expo-dev-client']} />

<Collapsible summary="Are you using this library in a existing (bare) React Native apps?">

Apps that don't use [Continuous Native Generation](/workflow/continuous-native-generation/) or are created with `npx react-native`, require further configuration after installing this library. See steps 1 and 2 from [Install `expo-dev-client` in an existing React Native app](/bare/install-dev-builds-in-bare/).

</Collapsible>

</Step>

<Step label="2">

### Build the native app (Android)

<Prerequisites numberOfRequirements={3}>
  <Requirement number={1} title="Expo account">
    Sign up for an [Expo](https://expo.dev/signup) account, if you haven't already.
  </Requirement>
  <Requirement number={2} title="EAS CLI">
    The [EAS CLI](/build/setup/#install-the-latest-eas-cli) installed and logged in.
    <Terminal cmd={['$ npm install -g eas-cli && eas login']} />
  </Requirement>
  <Requirement number={3} title="An Android Emulator (optional)">
    An [Android Emulator](/workflow/android-studio-emulator/) is optional if you want to test your
    app on an emulator.
  </Requirement>
</Prerequisites>

<Terminal cmd={['$ eas build --platform android --profile development']} />

Read more about [Android builds on EAS](/tutorial/eas/android-development-build).

</Step>

<Step label="2">

### Build the native app (iOS Simulator)

<Prerequisites numberOfRequirements={3}>
  <Requirement number={1} title="Expo account">
    Sign up for an [Expo](https://expo.dev/signup) account, if you haven't already.
  </Requirement>
  <Requirement number={2} title="EAS CLI">
    The [EAS CLI](/build/setup/#install-the-latest-eas-cli) installed and logged in.
    <Terminal cmd={['$ npm install -g eas-cli && eas login']} />
  </Requirement>
  <Requirement number={3} title="macOS with iOS Simulator installed">
    iOS Simulators are available only on macOS. Make sure you have the [iOS
    Simulator](/workflow/ios-simulator/) installed.
  </Requirement>
</Prerequisites>

Edit `development` profile in **eas.json** and set the [`simulator`](/eas/json/#simulator) option to `true` (you have to create a separate profile for simulator builds if you also want to create iOS device builds for this project).

```json eas.json
{
  "build": {
    "development": {
      "ios": {
        "simulator": true
      }
    }
  }
}
```

<Terminal cmd={['$ eas build --platform ios --profile development']} />

iOS Simulator builds can only be installed on simulators and not on real devices.

Read more about [iOS Simulator builds on EAS](/tutorial/eas/ios-development-build-for-simulators/).

</Step>

<Step label="2">
### Build the native app (iOS device)

<Prerequisites numberOfRequirements={3}>
  <Requirement number={1} title="Expo account">
    Sign up for an [Expo](https://expo.dev/signup) account, if you haven't already.
  </Requirement>
  <Requirement number={2} title="EAS CLI">
    The [EAS CLI](/build/setup/#install-the-latest-eas-cli) installed and logged in.
    <Terminal cmd={['$ npm install -g eas-cli && eas login']} />
  </Requirement>
  <Requirement number={3} title="Apple Developer account">
    A paid [Apple Developer](https://developer.apple.com/) account for creating [signing
    credentials](/app-signing/managed-credentials/#generating-app-signing-credentials) so the app
    could be installed on an iOS device.
  </Requirement>
</Prerequisites>

<Terminal cmd={['$ eas build --platform ios --profile development']} />

iOS device builds can only be installed on iPhone devices and not on iOS Simulators.

Read more about [iOS device builds on EAS](/tutorial/eas/ios-development-build-for-devices/).

</Step>

<Step label="3">
### Install the app

You'll need to install the native app on your device, emulator, or simulator.

#### When building on EAS

If you create your development build on EAS, the CLI will prompt you to install the app after the build is finished. You can also install previous builds from the [expo.dev](https://expo.dev/) dashboard or using [Expo Orbit](https://expo.dev/orbit).

#### When building locally using EAS CLI

When building locally the output of the build will be an archive. You may drag and drop this on your Android Emulator/iOS Simulator to install it, or use [Expo Orbit](https://expo.dev/orbit) to install a build from your local machine.

</Step>

<Step label="4">
### Start the bundler

The development client built in **step 2** is the native side of your app (basically your own version of Expo Go). To continue developing, you'll also want to start the JavaScript bundler.

Depending on how you built the app, this may already be running, but if you close the process for any reason, there is no need to rebuild your development client. Simply restart the JavaScript bundler with:

<Terminal cmd={['$ npx expo start']} />

This is the same command you would have used with Expo Go. It detects whether your project has `expo-dev-client` installed, in which case it will default to targeting your development build instead of Expo Go.

</Step>

## Video walkthroughs

<BoxLink
  title={`"EAS Tutorial Series"`}
  description="A course on YouTube: learn how to speed up your development with Expo Application Services."
  href="https://www.youtube.com/playlist?list=PLsXDmrmFV_AS14tZCBin6m9NIS_VCUKe2"
  Icon={VideoRecorderIcon}
/>

<BoxLink
  title={`"Async Office Hours: How to make a development build with EAS Build"`}
  description="Learn how to make a development build with EAS Build in this video tutorial hosted by Developer Success Engineer: Keith Kurak."
  href="https://www.youtube.com/watch?v=LUFHXsBcW6w"
  Icon={VideoRecorderIcon}
/>
